<?php
/**
 * 加载视图文件
 * @param string $name 视图文件名字
 * @param array $data 赋值数据
 * @param array $bt 追踪堆栈
 * @return string
 */
function load_view($name, $data=[], $bt){
    ob_start();
    foreach ($data as $k=>$v){
        $$k = $v;
    }
    $dir = $GLOBALS['projectDir'][getProjectName($bt)];
    $path = $dir . "/views/$name.tpl.php";
    if(is_file($path)) require $path;
    return ob_get_clean();
}

/**
 * 返回视图数据
 * @param $name
 * @param array $data
 * @return array
 */
function view($name, $data=[]){
    return ['type'=>'view', 'data'=>load_view($name, $data, debug_backtrace())];
}

/**
 * 返回json数据
 * @param $data
 * @return array
 */
function json($data){
    return ['type'=>'json', 'data'=>$data];
}

/**
 * 正确格式数据（接口返回）
 * @param array $result
 * @return array
 */
function success($result = []){
    return ['Status' => 1, 'Result' => $result];
}

/**
 * 错误格式数据（接口返回）
 * @param $message
 * @param int $errCode
 * @return array
 */
function error($message, $errCode=1){
    return ['Status' => 0, 'ErrMsg' => $message, 'ErrCode' => $errCode];
}

/**
 * 判断返回是否正确
 * @param array $result success()或error()返回的数据
 * @return bool
 */
function isSuccess(array $result){
    if(!isset($result['Status'])) return false;
    if($result['Status'] === 0) return false;
    return true;
}

/**
 * 获取成功返回结果
 * @param array $result success()或error()返回的数据
 * @return mixed
 */
function getSuccessResult(array $result){
    if(!isSuccess($result)) return false;
    return $result['Result'];
}

/**
 * 获取请求类型（get,post）
 * @return string
 */
function getRequestMethod(){
    return isset($_SERVER['REQUEST_METHOD']) ? strtolower($_SERVER['REQUEST_METHOD']) : 'get';
}

/**
 * 是否post请求
 * @return bool
 */
function isPost(){
    return getRequestMethod() == 'post';
}

/**
 * 转换首单词大写风格的字符串到小写加下划线风格的字符串
 * @param string $str UserAuth
 * @return string user_auth
 */
function parseStr($str){
    return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $str), "_"));
}

/**
 * 获取所在项目文件夹名
 * @param array $backtrace 追踪堆栈
 * @param int $index 下标
 * @return string
 */
function getProjectName($backtrace, $index = 0){
    $file = __FILE__;
    if (isset($backtrace[$index]) && isset($backtrace[$index]['file'])) {
        $file = $backtrace[$index]['file'];
    }
    preg_match('/^.*Applications\/(\w+).*$/', $file, $m);
    $name = isset($m[1]) ? $m[1] : 'common';
    if($name != 'common') return $name;
    return getProjectName($backtrace, $index + 1);
}